#pragma once
#include "Degree.h"

VAMPIRE_NAMESPACE_BEGIN

class _VampireExport Radian : public MemoryAlloc
{
public:
	Radian(void) : mData(0.0f) {}

	explicit Radian(const Real& data) : mData(data) {}

	Radian                  operator + (const Radian& rhs) const;
	Radian                  operator + (const Real& rhs) const;

	Radian                  operator - (const Radian& rhs) const;
	Radian                  operator - (const Real& rhs) const;

	Radian                  operator * (const Radian& rhs) const;
	Radian                  operator * (const Real& rhs) const;

	Radian                  operator / (const Radian& rhs) const;
	Radian                  operator / (const Real& rhs) const;

	Radian&                 operator += (const Radian& rhs);
	Radian&                 operator += (const Real& rhs);

	Radian&                 operator -= (const Radian& rhs);
	Radian&                 operator -= (const Real& rhs);

	Radian&                 operator *= (const Radian& rhs);
	Radian&                 operator *= (const Real& rhs);

	Radian&                 operator /= (const Radian& rhs);
	Radian&                 operator /= (const Real& rhs);

	void                    operator = (const Radian& rhs);
	void                    operator = (const Real& rhs);

	bool                    operator == (const Radian& rhs) const;
	bool                    operator != (const Radian& rhs) const;

	Radian                  operator + () const;
	Radian                  operator - () const;

	Degree                  toDegree() const;

public:
	Real                    mData;
};

VAMPIRE_NAMESPACE_END